﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Sakura.Games.StgFramework.Builder
{
	using Res = Properties.Resources;

	/// <summary>
	/// 为数据类型提供基础类型。
	/// </summary>
	[Serializable]
	public abstract class DataItem : EditableObject
	{
		/// <summary>
		/// 该项目的名称。
		/// </summary>
		private string _Name;

		/// <summary>
		/// 获取或设置该项目的名称。
		/// </summary>
		public string Name
		{
			get
			{
				return _Name;
			}
			set
			{
				_Name = value;
				this.OnPropertyChanged("Name");
			}
		}

		/// <summary>
		/// 该项目的描述。
		/// </summary>
		private string _Description;

		/// <summary>
		/// 获取或设置该项目的描述。
		/// </summary>
		public string Description
		{
			get
			{
				return _Description;
			}
			set
			{
				_Description = value;
				this.OnPropertyChanged("Description");
			}
		}

		/// <summary>
		/// 初始化一个数据项目的新实例。
		/// </summary>
		protected DataItem()
		{
		}


		/// <summary>
		/// 在两个同类型对象之间转移数据。
		/// </summary>
		/// <param name="source">作为数据源的对象。</param>
		/// <param name="target">作为数据目标的对象。</param>
		protected override void CopyData(object source, object target)
		{
			var realSource = source as DataItem;
			var realTarget = target as DataItem;

			realTarget.Name = realSource.Name;
			realTarget.Description = realSource.Description;
		}

		/// <summary>
		/// 获得对象指定列的错误信息。
		/// </summary>
		/// <param name="columnName">要获取的错误的列。</param>
		/// <returns>该列的错误信息。</returns>
		protected override string GetError(string columnName)
		{
			switch (columnName)
			{
				case "Name":
					if (string.IsNullOrEmpty(this._Name))
					{
						return Res.ErrorDataItemNameIsNull;
					}
					break;
			}

			return base.GetError(columnName);
		}
	}
}
